<?php


namespace App\Http\Controllers\Api;


use App\Services\ConfigService;
use Illuminate\Http\Request;

class ConfigController extends BaseController
{

    /**
     * @api {post} manager/config/get 01、读取系统配置
     * @apiName Info-Config
     * @apiGroup 97-Config
     * @apiVersion 1.0.0
     *
     * @apiParam {Array} keys 配置键名
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {String} data.name 配置名称
     * @apiSuccess {String} data.key 配置键名
     * @apiSuccess {String} data.value 配置值 注:不同的配置，值含义不同
     * @apiSuccess {Object} data.params 补充参数 注:不同的配置，补充参数不同
     *
     * @param Request $request
     * @param ConfigService $service
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function keyBy(Request $request, ConfigService $service) {
        return $service->keyBy($request->input());
    }

    /**
     * @api {post} manager/config/set/batch 02、批量更新配置
     * @apiName ConfigUpdateBatch
     * @apiGroup 97-Config
     * @apiVersion 1.0.0
     *
     * @apiParam {String} keys 配置键名数据集
     * @apiParam {String} values 配置值数据集
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Object} data.params 具体参数按实际返回为准
     *
     * @param Request $request
     * @param ConfigService $service
     * @return \App\Models\Partner|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function updateBatch(Request $request, ConfigService $service) {
        return $service->updateBatch($request->get('keys'), $request->get('values'));
    }

    /**
     * @api {post} manager/config/set/sms 03、短信通道配置
     * @apiName ConfigSms
     * @apiGroup 97-Config
     * @apiVersion 1.0.0
     *
     * @apiParam {Number{1,2}} mode 通道类型 1:腾讯云通道 2:阿里云通道
     * @apiParam {String} signature 短信签名
     * @apiParam {String} access_ak 通道访问密钥
     * @apiParam {String} access_sk 通道访问密码
     * @apiParam {String} [appid] 应用唯一标识 注:腾讯云通道必须填写
     * @apiParam {String} [captcha] 验证码模板编码
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {String} data.name 配置名称
     * @apiSuccess {String} data.key 配置键名
     * @apiSuccess {String} data.value 通道类型 1:腾讯云通道 2:阿里云通道
     *
     * @apiSuccess {Object} data.params 补充参数数据集
     * @apiSuccess {String} data.params.appid 短信应用唯一标识 注:腾讯云通道使用
     * @apiSuccess {String} data.params.signature 短信签名
     * @apiSuccess {String} data.params.access_ak 通道访问密钥
     * @apiSuccess {String} data.params.access_sk 通道访问密码
     *
     * @apiSuccess {Object} data.params.tpl 模板编码数据集
     * @apiSuccess {String} data.params.tpl.captcha 验证码模板编码
     *
     * @param Request $request
     * @param ConfigService $service
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function updateSms(Request $request, ConfigService $service) {
        return $service->updateSms($request->input());
    }

    /**
     * @api {post} manager/config/set/wechat_pay 04、微信付款配置
     * @apiName ConfigPayWechat
     * @apiGroup 97-Config
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} mch_id 商户号
     * @apiParam {String} mch_sk 商户密钥
     * @apiParam {String} [notify_url] 异步通知接口地址
     * @apiParam {String} [client_key_path] 商户API私钥路径
     * @apiParam {String} [client_cert_path] 微信平台证书路径
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {String} data.name 配置名称
     * @apiSuccess {String} data.key 配置键名
     * @apiSuccess {String} data.value 微信支付商户号
     *
     * @apiSuccess {Object} data.params 补充参数数据集
     * @apiSuccess {String} data.params.mch_sk 商户密钥
     * @apiSuccess {String} data.params.notify_url 异步通知接口地址
     * @apiSuccess {String} data.params.client_key_path 商户API私钥路径
     * @apiSuccess {String} data.params.client_cert_path 微信平台证书路径
     *
     * @param Request $request
     * @param ConfigService $service
     * @return \App\Models\Partner|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function updateWechatPay(Request $request, ConfigService $service) {
        return $service->updateWechatPay($request->input());
    }

    /**
     * @api {post} manager/config/set/alipay_pay 05、阿里付款配置
     * @apiName ConfigPayAlipay
     * @apiGroup 97-Config
     * @apiVersion 1.0.0
     *
     * @apiParam {String} appid 支付宝应用唯一标识
     * @apiParam {String{1,2}} mode 加签方式 1:公钥（不支持退款接口） 2:证书
     * @apiParam {String} [alipay_public_key] 支付宝公钥 注:加签方式为“公钥”时必须
     * @apiParam {String} [alipay_cert_path] 支付宝公钥证书 注:加签方式为“证书”时必须
     * @apiParam {String} [alipay_root_cert_path] 支付宝根证书 注:加签方式为“证书”时必须
     * @apiParam {String} [encrypt_key] 应用AES密钥
     * @apiParam {String} [notify_url] 异步通知接口地址
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {String} data.name 配置名称
     * @apiSuccess {String} data.key 配置键名
     * @apiSuccess {String} data.value 加签方式 1:公钥 2:证书
     *
     * @apiSuccess {Object} data.params 补充参数数据集
     * @apiSuccess {String} data.params.appid 支付宝应用唯一标识
     * @apiSuccess {String} data.params.alipay_public_key 支付宝公钥
     * @apiSuccess {String} data.params.alipay_cert_path 支付宝公钥证书
     * @apiSuccess {String} data.params.alipay_root_cert_path 支付宝根证书
     * @apiSuccess {String} data.params.encrypt_key 应用AES密钥
     * @apiSuccess {String} data.params.notify_url 异步通知接口地址
     *
     * @param Request $request
     * @param ConfigService $service
     * @return \App\Models\Partner|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function updateAlipayPay(Request $request, ConfigService $service) {
        return $service->updateAlipayPay($request->input());
    }

    /**
     * @api {post} manager/config/set/wechat_gzh 06、微信公众号配置
     * @apiName ConfigGzh
     * @apiGroup 97-Config
     * @apiVersion 1.0.0
     *
     * @apiParam {String} appid 公众号AppId唯一标识
     * @apiParam {String} secret 公众号通信密钥
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {String} data.name 配置名称
     * @apiSuccess {String} data.key 配置键名
     * @apiSuccess {String} data.value 公众号AppId唯一标识
     *
     * @apiSuccess {Object} data.params 补充参数数据集
     * @apiSuccess {String} data.params.secret 公众号通信密钥
     *
     * @param Request $request
     * @param ConfigService $service
     * @return \App\Models\Partner|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function updateWechatGzh(Request $request, ConfigService $service) {
        return $service->updateWechat($request->input(), 'gzh');
    }

    /**
     * @api {post} manager/config/set/wechat_xcx 07、微信小程序配置
     * @apiName ConfigXcx
     * @apiGroup 97-Config
     * @apiVersion 1.0.0
     *
     * @apiParam {String} appid 小程序AppId唯一标识
     * @apiParam {String} secret 小程序通信密钥
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {String} data.name 配置名称
     * @apiSuccess {String} data.key 配置键名
     * @apiSuccess {String} data.value 小程序AppId唯一标识
     *
     * @apiSuccess {Object} data.params 补充参数数据集
     * @apiSuccess {String} data.params.secret 小程序通信密钥
     *
     * @param Request $request
     * @param ConfigService $service
     * @return \App\Models\Partner|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function updateWechatXcx(Request $request, ConfigService $service) {
        return $service->updateWechat($request->input(), 'xcx');
    }

    public function updatePinduoduo(Request $request, ConfigService $service) {
        return $service->updatePinduoduo($request->input(), 'pinduoduo');
    }
}
